<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>原型链继承</title>
</head>
<body>
  
</body>
<script>
  // 继承：原型对象的所有属性和方法，都能被实例所共享

  // Animal 类

  // Dog类
  // 定义Animal
  function Animal(){
    this.name = '大黄';
    this.colors = ['red','green','blue'];
  }
  Animal.prototype.getName = function(){
    return this.name;
  }

  function Dog(){};
  // Dog 继承了Animal
  // 本质：重写原型对象，将一个父对象的属性和方法作为一个子对象的原型对象的属性和方法
  Dog.prototype = new Animal();
  Dog.prototype.constructor = Dog;

  var d1 = new Dog();
  var d2 = new Dog();


  console.log(d1.name);  //大黄
  console.log(d1.getName());  //大黄


  console.log(d1.colors);   //["red", "green", "blue"]
  console.log(d2.colors);   //["red", "green", "blue"]
  // 给 d1 的 colors 添加一个 pink
  d1.colors.push('pink');
 // 再次打印 ，发现  d2 的 colors 也增加了一个 pink （这就是问题的所在了）
  console.log(d1.colors);   // ["red", "green", "blue", "pink"]
  console.log(d2.colors);   // ["red", "green", "blue", "pink"]

  // 问题1：父类中的实例属性一旦赋值给子类的原型属性，此时这些属性都属于子类的共享属性
  // 问题2：实例化子类型的时候，不能向父类型的构造函数传参


</script>
</html>